package cn.liulingfengyu.structuralpattern.proxypattern;

/**
 * 代理类
 */
public class Proxy implements Subject {
    private RealSubject realSubject;

    @Override
    public void request() {
        // 在调用真实主题之前执行额外操作
        preRequest();

        // 调用真实主题
        if (realSubject == null) {
            realSubject = new RealSubject();
        }
        realSubject.request();

        // 在调用真实主题之后执行额外操作
        postRequest();
    }

    private void preRequest() {
        System.out.println("代理执行前置操作");
    }

    private void postRequest() {
        System.out.println("代理执行后置操作");
    }
}